// import 'dart:async';

// import 'package:cached_network_image/cached_network_image.dart';
// import 'package:film/controller/auth_controller.dart';
// import 'package:film/controller/film_controller.dart';
// import 'package:film/model/film_model.dart';
// import 'package:film/service/api_service.dart';
// import 'package:flutter/material.dart';
// import 'package:flutter/services.dart';
// import 'package:flutter_vlc_player/flutter_vlc_player.dart';
// import 'package:get/get.dart';
// import 'package:gif/gif.dart';

// class FilmScreen extends StatefulWidget {
//   const FilmScreen({Key? key}) : super(key: key);

//   @override
//   _FilmScreenState createState() => _FilmScreenState();
// }

// class _FilmScreenState extends State<FilmScreen> {
//   // FilmController filmController = Get.find();
//   AuthController authController = Get.find();
//   late VlcPlayerController _controller;
//   final DioService dioService = DioService();
//   bool _isFullScreen = false;
//   bool _showControls = false;
//   var _isInitialized = false.obs;
//   var _isLoading = true.obs;
//   Timer? _hideControlsTimer;
//   final GlobalKey _playerKey = GlobalKey();
//   var url;
//   var vodId;
//   bool _isPlay = false;

//   // 影片列表
//   var recommendFilmList = <Film>[].obs;
//   var film = Film().obs;
//   var videoItemList = <VideoItem>[].obs;
//   final selectedEpisodeIndex = 0.obs;

//   @override
//   void initState() {
//     super.initState();
//     url = Get.arguments['url'];
//     vodId = Get.arguments['vodId'];
//     _initializePlayer();
//     _initializeVideo();
//   }

//   void _initializePlayer() {
//     try {
//       _controller = VlcPlayerController.network(
//         url,
//         hwAcc: HwAcc.full,
//         autoPlay: true,
//         options: VlcPlayerOptions(),
//         // options: VlcPlayerOptions(advanced: VlcAdvancedOptions([VlcAdvancedOptions.networkCaching(3000)])),
//       );
//       // _controller.setMediaFromNetwork(widget.videoUrl);
//       _controller.addListener(() {
//         if (mounted) {
//           final value = _controller.value;
//           // 视频已初始化
//           if (value.isInitialized && !_isPlay) {
//             // _isPlay = true;
//             // _controller.play();
//             // print('视频已初始化，时长: ${value.duration}');
//           }
//           // 视频正在播放
//           if (value.isPlaying) {
//             print('isPlaying');
//             _isLoading.value = false;
//             // print('正在播放，当前位置: ${value.position}');
//           }
//           // 播放结束
//           if (value.isEnded) {
//             // print('视频播放完成');
//           }
//           // 错误处理
//           if (value.hasError) {
//             // print('播放错误: ${value.errorDescription}');
//           }
//           setState(() {});
//         }
//       });
//       _isInitialized.value = true;
//     } catch (e) {
//       print('初始化错误: ${e}');
//     }
//   }

//   /// 获取视频
//   Future<void> _initializeVideo() async {
//     try {
//       final ApiResponse<VideoDetails> response = await dioService.getVideoByID(vodId: vodId);
//       if (response.success && response.data != null) {
//         film.value = Film.fromJson(response.data!.video);
//         videoItemList.value = parseVideoItems(film.value.vodPlayUrl ?? "");
//         getRecommendFilmList(film.value.vodYear!);
//         dioService.addVideoRecord(videoId: vodId, look: '1');
//       }
//     } catch (e) {
//       print('获取视频失败: $e');
//     }
//   }

//   /// 获取推荐视频
//   Future<void> getRecommendFilmList(String vodYear) async {
//     try {
//       SearchCriteria criteria = SearchCriteria(page: "1", limit: "12", resultType: "1", vodYear: vodYear);
//       ApiResponse<List<Film>> response = await dioService.searchVideo(criteria);
//       if (response.success) {
//         recommendFilmList.assignAll(response.data ?? []);
//       }
//     } catch (e) {
//       print('获取推荐视频失败: $e');
//     }
//   }

//   /// 添加视频记录(观看记录|追番记录)
//   Future<void> addVideoRecord(
//     String videoId,
//     String follow,
//   ) async {
//     final ApiResponse<void> response = await dioService.addVideoRecord(
//       videoId: videoId,
//       follow: follow,
//     );
//     if (response.success) {
//       Get.snackbar(
//         '成功',
//         '追番成功！',
//         duration: Duration(seconds: 1),
//       );
//     }
//   }

//   List<VideoItem> parseVideoItems(String vodPlayUrl) {
//     final List<VideoItem> result = [];
//     final episodes = vodPlayUrl.split('#');
//     for (var episode in episodes) {
//       final parts = episode.split('\$');
//       if (parts.length == 2) {
//         result.add(VideoItem(
//           name: parts[0].trim(),
//           code: parts[1].trim(),
//         ));
//       }
//     }
//     return result;
//   }

//   /// 选择剧集
//   Future<void> selectEpisode(String urlKey) async {
//     try {
//       _controller.pause();
//       _isLoading.value = true;
//       final ApiResponse<String> res = await dioService.getVideoUrl(url: urlKey);
//       if (res.success) {
//         url = res.data ?? '';
//       }
//       _controller.setMediaFromNetwork(url);
//     } catch (e) {
//       print('切换剧集失败: $e');
//     }
//   }

//   @override
//   void dispose() {
//     if (_isFullScreen) {
//       _exitFullScreen();
//     }
//     _controller.dispose();
//     super.dispose();
//   }

//   void _toggleFullScreen() {
//     setState(() {
//       _isFullScreen = !_isFullScreen;
//       if (_isFullScreen) {
//         SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
//         SystemChrome.setPreferredOrientations([
//           DeviceOrientation.landscapeLeft,
//           DeviceOrientation.landscapeRight,
//         ]);
//       } else {
//         _exitFullScreen();
//       }
//     });
//   }

//   void _exitFullScreen() {
//     SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
//     SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
//   }

//   @override
//   Widget build(BuildContext context) {
//     return Scaffold(
//       appBar: !_isFullScreen
//           ? AppBar(
//               toolbarHeight: 0,
//               backgroundColor: Colors.black,
//             )
//           : null,
//       body: SafeArea(
//         top: !_isFullScreen,
//         bottom: false,
//         left: !_isFullScreen,
//         right: !_isFullScreen,
//         child: _isFullScreen ? _buildFullScreenPlayer() : _buildNormalPlayer(),
//       ),
//     );
//   }

//   Widget _buildNormalPlayer() {
//     return Column(
//       children: [
//         Container(
//           color: Colors.black,
//           child: AspectRatio(
//             aspectRatio: 16 / 9,
//             child: Center(
//               child: Obx(
//                 () => Stack(
//                   children: [
//                     _buildPlayerWidget(),
//                     _buildControl(),
//                     // if (_isLoading.value)
//                     //   Center(
//                     //     child: Container(
//                     //       width: double.infinity,
//                     //       height: double.infinity,
//                     //       color: Colors.black,
//                     //       child: Gif(
//                     //         height: 97,
//                     //         width: 71,
//                     //         autostart: Autostart.loop,
//                     //         image: const AssetImage('assets/images/loading.gif'),
//                     //       ),
//                     //     ),
//                     //   ),
//                     // 当加载时，我们添加两个独立的层
//                     if (_isLoading.value) _buildLoadingWidget(),
//                   ],
//                 ),
//               ),
//             ),
//           ),
//         ),
//         Expanded(
//           child: SingleChildScrollView(
//             physics: AlwaysScrollableScrollPhysics(),
//             child: Padding(
//               padding: const EdgeInsets.all(12.0),
//               child: Column(
//                 crossAxisAlignment: CrossAxisAlignment.start,
//                 children: [
//                   _buildFilmInfo(),
//                   const SizedBox(height: 20),
//                   _buildActionButtons(),
//                   const SizedBox(height: 20),
//                   _buildEpisodeSelector(),
//                   const SizedBox(height: 20),
//                   _buildRecommendations(),
//                 ],
//               ),
//             ),
//           ),
//         ),
//       ],
//     );
//   }

//   // 视频加载动画
//   Widget _buildLoadingWidget() {
//     return Stack(
//       alignment: Alignment.center,
//       children: [
//         Container(color: Colors.black),
//         Center(
//           child: Gif(
//             height: 97,
//             width: 71,
//             autostart: Autostart.loop,
//             image: const AssetImage('assets/images/loading.gif'),
//           ),
//         ),
//       ],
//     );
//   }

//   Widget _buildFullScreenPlayer() {
//     return Container(
//       width: double.infinity,
//       height: double.infinity,
//       color: Colors.black,
//       child: Obx(
//         () => Stack(
//           children: [
//             _buildPlayerWidget(),
//             _buildControl(),
//             if (_isLoading.value)
//               Center(
//                 child: Gif(
//                   height: 97,
//                   width: 71,
//                   autostart: Autostart.loop,
//                   image: const AssetImage('assets/images/loading.gif'),
//                 ),
//               ),
//           ],
//         ),
//       ),
//     );
//   }

//   Widget _buildControl() {
//     return Positioned.fill(
//       child: GestureDetector(
//         child: Container(
//           color: Colors.transparent,
//           child: Column(
//             mainAxisAlignment: MainAxisAlignment.spaceBetween,
//             children: [
//               _buildControlTop(),
//               // GestureDetector(
//               //   onTap: () {
//               //     print('点击底部区域，隐藏控件');
//               //   },
//               //   child: Container(
//               //     padding: EdgeInsets.only(top: 10),
//               //     child: Text('点击', style: TextStyle(color: Colors.white)),
//               //   ),
//               // ),
//               _buildControlBottom(),
//             ],
//           ),
//         ),
//         onTap: () {
//           print('ok');
//           setState(() {
//             _showControls = !_showControls;
//           });
//           _startHideControlsTimer();
//         },
//       ),
//     );
//   }

//   // 播放器
//   Widget _buildPlayerWidget() {
//     return Center(
//       child: VlcPlayer(
//         key: _playerKey,
//         controller: _controller,
//         aspectRatio: 16 / 9,
//       ),
//     );
//   }

//   // 顶部控制
//   Widget _buildControlTop() {
//     return AnimatedOpacity(
//       // 使用 AnimatedOpacity 实现平滑的显示/隐藏过渡
//       opacity: _showControls ? 1.0 : 0.0,
//       duration: const Duration(milliseconds: 300),
//       child: Container(
//         height: 50,
//         alignment: Alignment.center,
//         decoration: BoxDecoration(
//           gradient: LinearGradient(
//             colors: [
//               Colors.black.withOpacity(0.3),
//               Colors.transparent,
//             ],
//             begin: Alignment.topCenter,
//             end: Alignment.bottomCenter,
//           ),
//         ),
//         // color: Colors.amber,
//         padding: EdgeInsets.symmetric(horizontal: _isFullScreen ? 50 : 10),
//         child: Row(
//           children: [
//             // 返回按钮
//             GestureDetector(
//               child: Icon(
//                 Icons.arrow_back_ios,
//                 color: Colors.white,
//               ),
//               onTap: () {
//                 print('top');
//                 if (_isFullScreen) {
//                   _toggleFullScreen();
//                 } else {
//                   Get.back();
//                 }
//                 _startHideControlsTimer();
//               },
//             ),
//           ],
//         ),
//       ),
//     );
//   }

//   // 底部控制
//   Widget _buildControlBottom() {
//     // 如果视频未初始化，不显示任何控件
//     if (!_controller.value.isInitialized) {
//       return const SizedBox.shrink();
//     }
//     return AnimatedOpacity(
//       opacity: _showControls ? 1.0 : 0.0,
//       duration: const Duration(milliseconds: 300),
//       child: Container(
//         height: 50,
//         alignment: Alignment.center,
//         decoration: BoxDecoration(
//           gradient: LinearGradient(
//             colors: [
//               Colors.transparent,
//               Colors.black.withOpacity(0.3),
//             ],
//             begin: Alignment.topCenter,
//             end: Alignment.bottomCenter,
//           ),
//         ),
//         // color: Colors.amber,
//         padding: EdgeInsets.symmetric(horizontal: _isFullScreen ? 50 : 10),
//         child: Row(
//           children: [
//             // 播放/暂停按钮
//             GestureDetector(
//               child: Icon(
//                 _controller.value.isPlaying ? Icons.pause : Icons.play_arrow,
//                 color: Colors.white,
//               ),
//               onTap: () {
//                 if (_controller.value.isEnded) {
//                   _controller.seekTo(Duration.zero);
//                   _controller.play();
//                 }
//                 _controller.value.isPlaying ? _controller.pause() : _controller.play();
//                 // 每次操作都重置计时器
//                 _startHideControlsTimer();
//               },
//             ),
//             // 进度条
//             Expanded(
//               child: Slider(
//                 activeColor: Colors.white,
//                 inactiveColor: Colors.white30,
//                 value: _controller.value.position.inMilliseconds.toDouble(),
//                 min: 0,
//                 max: _controller.value.duration.inMilliseconds.toDouble().clamp(0.0, double.infinity),
//                 onChanged: (value) {
//                   _controller.seekTo(Duration(milliseconds: value.toInt()));
//                 },
//                 onChangeEnd: (value) {
//                   // 拖动结束后再重置计时器
//                   _startHideControlsTimer();
//                 },
//               ),
//             ),
//             // 时间显示
//             Text(
//               '${_formatDuration(_controller.value.position)} / ${_formatDuration(_controller.value.duration)}',
//               style: const TextStyle(color: Colors.white, fontSize: 12),
//             ),
//             const SizedBox(width: 8),
//             // 全屏按钮
//             GestureDetector(
//               child: Icon(
//                 _isFullScreen ? Icons.fullscreen_exit : Icons.fullscreen,
//                 color: Colors.white,
//               ),
//               onTap: _toggleFullScreen,
//             ),
//           ],
//         ),
//       ),
//     );
//   }

//   String _formatDuration(Duration duration) {
//     String twoDigits(int n) => n.toString().padLeft(2, '0');
//     final hours = twoDigits(duration.inHours);
//     final minutes = twoDigits(duration.inMinutes.remainder(60));
//     final seconds = twoDigits(duration.inSeconds.remainder(60));
//     return [if (duration.inHours > 0) hours, minutes, seconds].join(':');
//   }

//   void _startHideControlsTimer() {
//     // 先取消之前的计时器（避免重复触发）
//     _hideControlsTimer?.cancel();

//     // 启动新的计时器（3秒后隐藏控制栏）
//     _hideControlsTimer = Timer(const Duration(seconds: 3), () {
//       if (mounted && _showControls) {
//         setState(() => _showControls = false);
//       }
//     });
//   }

//   Widget _buildFilmInfo() {
//     return Obx(
//       () => Row(
//         crossAxisAlignment: CrossAxisAlignment.center,
//         children: [
//           Container(
//             height: 60,
//             width: 50,
//             child: ClipRRect(
//               borderRadius: BorderRadius.circular(12),
//               child: film.value.vodPic != null
//                   ? Image.network(
//                       film.value.vodPic ?? '',
//                       fit: BoxFit.cover,
//                     )
//                   : SizedBox(),
//             ),
//           ),
//           SizedBox(width: 10),
//           Expanded(
//             child: Column(
//               children: [
//                 Row(
//                   mainAxisAlignment: MainAxisAlignment.spaceBetween,
//                   children: [
//                     // 标题
//                     Expanded(
//                       child: Text(
//                         film.value.vodName ?? '',
//                         style: const TextStyle(
//                           fontSize: 16,
//                           fontWeight: FontWeight.bold,
//                         ),
//                         maxLines: 2,
//                       ),
//                     ),
//                     // 评分
//                     // Row(
//                     //   children: [
//                     //     Text(
//                     //       '${filmData.value.score}',
//                     //       style: const TextStyle(
//                     //         fontSize: 16,
//                     //         color: Colors.green,
//                     //         fontWeight: FontWeight.bold,
//                     //       ),
//                     //     ),
//                     //     Text(
//                     //       '分',
//                     //       style: const TextStyle(
//                     //         fontSize: 12,
//                     //         color: Colors.green,
//                     //         fontWeight: FontWeight.bold,
//                     //       ),
//                     //     ),
//                     //   ],
//                     // ),
//                   ],
//                 ),
//                 const SizedBox(height: 8),
//                 // 标签和热度
//                 Row(
//                   children: [
//                     const Icon(Icons.favorite, color: Colors.red, size: 16),
//                     const SizedBox(width: 4),
//                     Text(
//                       '${film.value.vodHits}',
//                       style: const TextStyle(color: Colors.red),
//                     ),
//                     const SizedBox(width: 8),
//                     Expanded(
//                       child: Text(
//                         '${film.value.vodArea} / ${film.value.vodYear} / ${film.value.vodClass?.replaceAll(",", " / ")}',
//                         style: const TextStyle(color: Colors.grey, fontSize: 12),
//                         overflow: TextOverflow.ellipsis,
//                       ),
//                     ),
//                   ],
//                 ),
//               ],
//             ),
//           ),
//         ],
//       ),
//     );
//   }

//   /// 构建操作按钮行
//   Widget _buildActionButtons() {
//     // 辅助函数创建单个按钮
//     Widget buildButton(IconData icon, String label) {
//       return Column(
//         children: [
//           Icon(
//             icon,
//             color: Colors.grey[700],
//           ),
//           const SizedBox(height: 4),
//           Text(
//             label,
//             style: TextStyle(
//               color: Colors.grey[700],
//               fontSize: 12,
//             ),
//           ),
//         ],
//       );
//     }

//     return Row(
//       mainAxisAlignment: MainAxisAlignment.spaceAround,
//       children: [
//         buildButton(Icons.notifications_active_outlined, '催更'),
//         buildButton(Icons.cloud_download_outlined, '下载'),
//         buildButton(Icons.skip_next_outlined, '片头/尾'),
//         GestureDetector(
//           child: buildButton(Icons.favorite_border, '追剧'),
//           onTap: () => addVideoRecord(film.value.vodId!.toString(), "1"),
//         ),
//         buildButton(Icons.share_outlined, '分享'),
//       ],
//     );
//   }

//   /// 构建分集选择区域
//   Widget _buildEpisodeSelector() {
//     return Column(
//       crossAxisAlignment: CrossAxisAlignment.start,
//       children: [
//         // Row(
//         //   mainAxisAlignment: MainAxisAlignment.spaceBetween,
//         //   children: [
//         //     const Text('切换源 No.S ⌄', style: TextStyle(color: Colors.grey)),
//         //     Text(
//         //       '共${controller.filmData.value.episodes.length}集 >',
//         //       style: const TextStyle(color: Colors.grey),
//         //     ),
//         //   ],
//         // ),
//         const SizedBox(height: 10),
//         SizedBox(
//           height: 40,
//           child: Obx(
//             () => ListView.builder(
//               scrollDirection: Axis.horizontal,
//               itemCount: videoItemList.length,
//               itemBuilder: (context, index) {
//                 return Obx(() {
//                   final isSelected = selectedEpisodeIndex.value == index;
//                   return GestureDetector(
//                     onTap: () {
//                       if (!isSelected) {
//                         selectEpisode(videoItemList[index].code);
//                         selectedEpisodeIndex.value = index;
//                       }
//                     },
//                     child: Container(
//                       padding: const EdgeInsets.symmetric(horizontal: 16),
//                       margin: const EdgeInsets.only(right: 8),
//                       decoration: BoxDecoration(
//                         color: isSelected ? Colors.pink.withOpacity(0.1) : Colors.grey.withOpacity(0.1),
//                         borderRadius: BorderRadius.circular(8),
//                         border: isSelected ? Border.all(color: Colors.pink, width: 1) : null,
//                       ),
//                       alignment: Alignment.center,
//                       child: Text(
//                         videoItemList[index].name,
//                         style: TextStyle(
//                           color: isSelected ? Colors.pink : Colors.black87,
//                         ),
//                       ),
//                     ),
//                   );
//                 });
//               },
//             ),
//           ),
//         ),
//       ],
//     );
//   }

//   /// 构建相关推荐区域
//   Widget _buildRecommendations() {
//     return Column(
//       crossAxisAlignment: CrossAxisAlignment.start,
//       children: [
//         const Text(
//           '相关推荐',
//           style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
//         ),
//         const SizedBox(height: 10),
//         SizedBox(
//           height: 180, // 根据内容调整高度
//           child: Obx(
//             () => ListView.builder(
//               scrollDirection: Axis.horizontal,
//               itemCount: recommendFilmList.length,
//               itemBuilder: (context, index) {
//                 final item = recommendFilmList[index];
//                 return _buildRecommendationCard(item);
//               },
//             ),
//           ),
//         ),
//       ],
//     );
//   }

//   /// 构建单个推荐卡片
//   Widget _buildRecommendationCard(Film film) {
//     return GestureDetector(
//       onTap: () async {
//         bool isLogin = await authController.check();
//         if (isLogin) {
//           String url = await authController.getVideo(film.vodId!.toString(), 0);
//           Get.offAndToNamed(
//             '/film',
//             arguments: {'url': url, 'vodId': film.vodId!.toString()},
//           );
//         }
//       },
//       child: Container(
//         width: 110,
//         margin: const EdgeInsets.only(right: 10),
//         child: Column(
//           crossAxisAlignment: CrossAxisAlignment.start,
//           children: [
//             // 封面图和状态文字
//             Stack(
//               children: [
//                 ClipRRect(
//                   borderRadius: BorderRadius.circular(8),
//                   child: CachedNetworkImage(
//                     imageUrl: film.vodPic!,
//                     height: 140,
//                     width: 110,
//                     fit: BoxFit.cover,
//                     placeholder: (context, url) => Container(color: Colors.grey[200]),
//                     errorWidget: (context, url, error) => const Icon(Icons.error),
//                   ),
//                 ),
//                 Positioned(
//                   bottom: 0,
//                   left: 0,
//                   right: 0,
//                   child: Container(
//                     padding: const EdgeInsets.symmetric(vertical: 2, horizontal: 4),
//                     decoration: BoxDecoration(
//                       color: Colors.black.withOpacity(0.6),
//                       borderRadius: const BorderRadius.only(
//                         bottomLeft: Radius.circular(8),
//                         bottomRight: Radius.circular(8),
//                       ),
//                     ),
//                     child: Text(
//                       film.vodRemarks!,
//                       style: const TextStyle(color: Colors.white, fontSize: 10),
//                       textAlign: TextAlign.center,
//                     ),
//                   ),
//                 )
//               ],
//             ),
//             const SizedBox(height: 4),
//             // 标题
//             Text(
//               film.vodName!,
//               maxLines: 1,
//               overflow: TextOverflow.ellipsis,
//               style: const TextStyle(fontSize: 14, fontWeight: FontWeight.w500),
//             ),
//           ],
//         ),
//       ),
//     );
//   }
// }
